import axios from 'axios'

const baseUrl = process.env.API_BASE || '' // 客户端访问为空，服务端访问要加上本地地址

const parseUrl = (url, params) => { // 处理 url "no-param-reassign" 禁止给参数重新赋值
  const paramsCopy = params || {}
  const str = Object.keys(paramsCopy).reduce((result, key) => { // 形成问号之后的 url 字符串
    result += `${key}=${paramsCopy[key]}&` // eslint-disable-line
    return result
  }, '') // 默认为空
  return `${baseUrl}/api/${url}?${str.substr(0, str.length - 1)}` // 把最后一个拼接的 & 去掉
}

// cnode api 就提供了 get post 方法，所以这里包装这两种方法
export const get = (url, params) => { // params 就是用来接到 url 问号 ？后面的参数
  return new Promise((resolve, reject) => { // 异步 api 请求
    axios.get(parseUrl(url, params))
      .then((resp) => {
        const { data } = resp
        if (data && data.success === true) { // 有数据，而且数据中的success为true才算成功
          resolve(data) // 数据给传递出去
        } else {
          reject(data)
        }
      }).catch(reject)
  })
}

export const post = (url, params, datas) => {
  return new Promise((resolve, reject) => {
    axios.post(parseUrl(url, params), datas)
      .then((resp) => {
        const { data } = resp
        if (data && data.success === true) {
          resolve(data)
        } else {
          reject(data)
        }
      }).catch(reject)
  })
}
